#ifndef __ARRARY_STRUCTURE_H__
#define __ARRARY_STRUCTURE_H__

#include <stddef.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/*
1、声明动态数组结构体
2、初始化动态数组
3、动态数组操作函数（增删改查）
4、动态调整动态数组内存大小
4、释放动态数组内存
5、遍历所有的元素
*/

typedef struct
{
    int *array;//数组指针
    size_t capacity;//数组容量，整个数组的储存大小
    int length;//数组长度，数组中存储数据的长度
} DynamicArray;


//初始化动态数组
int initDynamicArray(DynamicArray *array, size_t initialCapacity);

//释放动态数组内存
int destroyDynamicArray(DynamicArray *array);

//调整动态数组内存大小
int resizeDynamicArray(DynamicArray *array, size_t newCapacity);

//获取动态数组长度（元素个数）
int getLength(const DynamicArray *array);

//在指定位置插入新元素
int insertAt(DynamicArray *array, size_t index, int element);

//在开头插入新元素
int insertBegin(DynamicArray *array, int element);

//在末尾插入新元素
int insertEnd(DynamicArray *array, int element);

//删除指定位置的元素并返回被删除的元素
int deleteAt(DynamicArray *array, size_t index);

//删除头部的元素并返回被删除的元素
int deleteBegin(DynamicArray *array);

//删除末尾的元素并返回被删除的元素
int deleteEnd(DynamicArray *array);

//遍历所有的元素
void print_all_element(DynamicArray *array);

#ifdef __cplusplus
}

#endif /* __cplusplus */

#endif